package com.wms.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.wms.entity.StoreReturn; // 替换为你实际的实体类
import com.wms.service.StoreReturnService; // 替换为你实际的服务类
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
 * @author TianWenHe
 * @date 2025/5/6
 * @desc Excel导入监听器 - 处理 StoreReturn 数据
 */
@Slf4j
public class StoreReturnListener extends AnalysisEventListener<StoreReturn> {

    // 批量插入阈值，可以根据需要调整
    private static final int BATCH_COUNT = 5;

    // 缓存待插入数据
    private List<StoreReturn> storeReturns = new ArrayList<>();

    // 注入业务服务
    private StoreReturnService storeReturnService;

    public StoreReturnListener(StoreReturnService storeReturnService) {
        this.storeReturnService = storeReturnService;
    }

    /**
     * 每解析一行数据会调用一次
     */
    @Override
    public void invoke(StoreReturn data, AnalysisContext context) {
        log.info("解析到一条退货单数据:{}", data);
        storeReturns.add(data);

        // 达到批处理数量时执行插入
        if (storeReturns.size() >= BATCH_COUNT) {
            saveData();
            storeReturns.clear();
        }
    }

    /**
     * 插入数据库的方法
     */
    private void saveData() {
        log.info("{}条退货单数据，开始存储数据库！", storeReturns.size());
        storeReturnService.insertBatch(storeReturns);
        log.info("退货单数据存储数据库成功！");
    }

    /**
     * 所有数据解析完成后调用
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        if (!storeReturns.isEmpty()) {
            saveData();
        }
        log.info("所有退货单数据解析完成！");
    }
}
